Phần 1: Giới Thiệu Đề tài phân tích và dự đoán giá điện thoại Nguồn Dữ Liệu: link: https://www.kaggle.com/datasets/iabhishekofficial/mobile-price-classification?datasetId=11167 tập dữ liệu: train.csv, test.csv Giới thiệu sơ lược về dữ liệu

Bộ dữ liệu gồm 21 cột và 2000 dòng : +Id +battery_power: Tổng năng lượng pin có thể lưu trữ +blue: Có bluetooth hay không +clock_speed:tốc độ mà bộ vi xử lý thực hiện các lệnh +dual_sim: có hỗ trợ hai sim hay không +fc: Độ phân giải camera trước +four_g: có 4g hay không +int_memory: dung lượng bộ nhớ trong +m_dep: độ dày điện thoại +mobile_wt: độ nặng điện thoại +n_cores:Số lõi của bộ xử lý +pc: Độ phân giải camera sau +px_height: chiều cao của độ phân giải màn hình +px_width: chiều rộng của độ phân giải màn hình +ram: Dung lượng của Ram +sc_h: chiều cao màn hình +sc_w: chiều rộng màn hình +talk_time: thời gian dài nhất khi sạc điện thoại +three_g: có 3g hay không +touch_screen: có màn hình cảm ứng hay không +wifi: có wifi hay không +price_range: khoảng giá trị chi phí điện thoại (0,1,2,3)

Kế Hoạch Phân Tích Dữ Liệu + Biến dự đoán: price_range + Biến sử dụng để dự đoán: các biến còn lại

Phần 2: Dữ Liệu

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.1.3
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.8
## v tidyr   1.2.0     v stringr 1.4.0
## v readr   2.1.2     v forcats 0.5.1
## Warning: package 'ggplot2' was built under R version 4.1.3
## Warning: package 'tibble' was built under R version 4.1.3
## Warning: package 'tidyr' was built under R version 4.1.3
## Warning: package 'readr' was built under R version 4.1.3
## Warning: package 'purrr' was built under R version 4.1.3
## Warning: package 'dplyr' was built under R version 4.1.3
## Warning: package 'forcats' was built under R version 4.1.3
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(ggplot2)
library(rpart)
library(rpart.plot)
## Warning: package 'rpart.plot' was built under R version 4.1.3
library(rattle)
## Warning: package 'rattle' was built under R version 4.1.3
## Loading required package: bitops
## Rattle: A free graphical interface for data science with R.
## Version 5.5.1 Copyright (c) 2006-2021 Togaware Pty Ltd.
## Type 'rattle()' to shake, rattle, and roll your data.
library(tree)
library('class')
library(corrplot)
## Warning: package 'corrplot' was built under R version 4.1.3
## corrplot 0.92 loaded
library(RColorBrewer)
library(e1071)
## Warning: package 'e1071' was built under R version 4.1.3
library(plotly)
## Warning: package 'plotly' was built under R version 4.1.3
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(rsample)
## Warning: package 'rsample' was built under R version 4.1.3
## 
## Attaching package: 'rsample'
## The following object is masked from 'package:e1071':
## 
##     permutations
df <- read.csv('C:/Users/quocd/OneDrive/Desktop/hellofile/datamining/train.csv')
df.split <- rsample::initial_split(
    df,
    prop=0.75, # 75% training, 25% testing 
    strata=price_range)

df.train <- rsample::training(df.split)
df.test <- rsample::testing(df.split)
head(df.train)
##    battery_power blue clock_speed dual_sim fc four_g int_memory m_dep mobile_wt
## 8           1954    0         0.5        1  0      0         24   0.8       187
## 10           509    1         0.6        1  2      1          9   0.1        93
## 15          1866    0         0.5        0 13      1         52   0.7       185
## 16           775    0         1.0        0  3      0         46   0.7       159
## 32          1568    1         0.5        0 16      0         33   1.0       150
## 35           644    1         2.7        0  0      0         22   0.7       157
##    n_cores pc px_height px_width  ram sc_h sc_w talk_time three_g touch_screen
## 8        4  0       512     1149  700   16    3         5       1            1
## 10       5 15      1137     1224  513   19   10        12       1            0
## 15       1 17       356      563  373   14    9         3       1            0
## 16       2 16       862     1864  568   17   15        11       1            1
## 32       8 20       413      654  508    5    1         6       1            1
## 35       8  3       311      881 1262   12    1        15       1            0
##    wifi price_range
## 8     1           0
## 10    0           0
## 15    1           0
## 16    1           0
## 32    1           0
## 35    0           0
dim(df.train)
## [1] 1500   21
summary(df.train)
##  battery_power         blue       clock_speed       dual_sim     
##  Min.   : 502.0   Min.   :0.00   Min.   :0.500   Min.   :0.0000  
##  1st Qu.: 857.8   1st Qu.:0.00   1st Qu.:0.700   1st Qu.:0.0000  
##  Median :1231.5   Median :0.00   Median :1.500   Median :1.0000  
##  Mean   :1241.1   Mean   :0.49   Mean   :1.517   Mean   :0.5107  
##  3rd Qu.:1614.0   3rd Qu.:1.00   3rd Qu.:2.200   3rd Qu.:1.0000  
##  Max.   :1997.0   Max.   :1.00   Max.   :3.000   Max.   :1.0000  
##        fc             four_g         int_memory        m_dep       
##  Min.   : 0.000   Min.   :0.0000   Min.   : 2.00   Min.   :0.1000  
##  1st Qu.: 1.000   1st Qu.:0.0000   1st Qu.:16.00   1st Qu.:0.2000  
##  Median : 3.000   Median :1.0000   Median :31.50   Median :0.5000  
##  Mean   : 4.309   Mean   :0.5147   Mean   :32.04   Mean   :0.5019  
##  3rd Qu.: 7.000   3rd Qu.:1.0000   3rd Qu.:47.00   3rd Qu.:0.8000  
##  Max.   :19.000   Max.   :1.0000   Max.   :64.00   Max.   :1.0000  
##    mobile_wt        n_cores            pc           px_height     
##  Min.   : 80.0   Min.   :1.000   Min.   : 0.000   Min.   :   0.0  
##  1st Qu.:109.0   1st Qu.:3.000   1st Qu.: 4.000   1st Qu.: 280.8  
##  Median :141.0   Median :4.000   Median :10.000   Median : 546.5  
##  Mean   :140.1   Mean   :4.535   Mean   : 9.815   Mean   : 639.0  
##  3rd Qu.:170.0   3rd Qu.:7.000   3rd Qu.:15.000   3rd Qu.: 935.2  
##  Max.   :200.0   Max.   :8.000   Max.   :20.000   Max.   :1949.0  
##     px_width           ram            sc_h            sc_w       
##  Min.   : 500.0   Min.   : 256   Min.   : 5.00   Min.   : 0.000  
##  1st Qu.: 868.5   1st Qu.:1208   1st Qu.: 9.00   1st Qu.: 2.000  
##  Median :1246.0   Median :2156   Median :12.00   Median : 5.000  
##  Mean   :1246.7   Mean   :2125   Mean   :12.32   Mean   : 5.785  
##  3rd Qu.:1629.2   3rd Qu.:3064   3rd Qu.:16.00   3rd Qu.: 9.000  
##  Max.   :1998.0   Max.   :3998   Max.   :19.00   Max.   :18.000  
##    talk_time        three_g       touch_screen         wifi       
##  Min.   : 2.00   Min.   :0.000   Min.   :0.0000   Min.   :0.0000  
##  1st Qu.: 7.00   1st Qu.:1.000   1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :11.00   Median :1.000   Median :1.0000   Median :0.0000  
##  Mean   :11.16   Mean   :0.756   Mean   :0.5107   Mean   :0.4987  
##  3rd Qu.:16.00   3rd Qu.:1.000   3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :20.00   Max.   :1.000   Max.   :1.0000   Max.   :1.0000  
##   price_range  
##  Min.   :0.00  
##  1st Qu.:0.75  
##  Median :1.50  
##  Mean   :1.50  
##  3rd Qu.:2.25  
##  Max.   :3.00
df.train = na.omit(df.train)
df.test = na.omit(df.test)
?cor()
## starting httpd help server ... done
duplicated(df.train)
##    [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##   [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [505] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [517] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [529] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [541] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [553] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [565] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [577] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [589] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [601] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [613] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [625] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [637] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [649] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [661] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [673] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [685] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [697] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [709] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [721] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [733] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [745] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [757] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [769] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [781] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [793] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [805] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [817] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [829] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [841] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [853] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [865] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [877] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [889] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [901] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [913] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [925] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [937] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [949] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [961] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [973] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [985] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [997] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1009] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1021] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1033] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1045] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1057] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1069] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1081] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1093] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1105] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1117] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1129] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1141] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1153] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1165] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1177] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1189] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1201] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1213] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1225] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1237] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1249] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1261] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1273] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1285] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1297] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1309] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1321] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1333] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1345] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1357] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1369] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1381] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1393] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1405] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1417] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1429] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1441] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1453] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1465] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1477] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [1489] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
duplicated(df.test)
##   [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [13] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [25] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [37] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [49] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [61] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [73] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [85] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
##  [97] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [109] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [121] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [133] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [145] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [157] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [169] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [181] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [193] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [205] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [217] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [229] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [241] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [253] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [265] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [277] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [289] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [301] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [313] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [325] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [337] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [349] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [361] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [373] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [385] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [397] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [409] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [421] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [433] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [445] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [457] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [469] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [481] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
## [493] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
cor(df.train)
##               battery_power          blue   clock_speed     dual_sim
## battery_power  1.0000000000  0.0161687628  0.0067016035 -0.044862216
## blue           0.0161687628  1.0000000000  0.0145180411  0.052449092
## clock_speed    0.0067016035  0.0145180411  1.0000000000  0.005637163
## dual_sim      -0.0448622162  0.0524490916  0.0056371634  1.000000000
## fc             0.0247674937  0.0232927709  0.0027545315 -0.032690356
## four_g         0.0199387104  0.0072579076 -0.0573826704 -0.005963034
## int_memory    -0.0024487999  0.0534140922 -0.0300320053 -0.021147134
## m_dep          0.0180279418  0.0093690006 -0.0281770229 -0.031553643
## mobile_wt      0.0259586033 -0.0064856319  0.0356514412 -0.022803886
## n_cores       -0.0177411620  0.0527160495 -0.0063607513 -0.031948298
## pc             0.0319934689 -0.0102960831 -0.0162858845 -0.023118330
## px_height      0.0174027193  0.0078821917 -0.0098093787 -0.019620695
## px_width      -0.0004907734 -0.0316993038  0.0007595226  0.012572337
## ram            0.0153362192  0.0366201558 -0.0199962418  0.040408509
## sc_h          -0.0227189911 -0.0057384144 -0.0012248462 -0.007560082
## sc_w          -0.0008134113  0.0214954626  0.0031684454 -0.018677024
## talk_time      0.0144587310  0.0024308879  0.0055823016 -0.052555861
## three_g        0.0115502480 -0.0393100420 -0.0466925694 -0.012718671
## touch_screen  -0.0048061387 -0.0009070545  0.0240149372 -0.013794723
## wifi          -0.0108700009 -0.0227246262 -0.0383335725  0.010726035
## price_range    0.2132462405  0.0411518820 -0.0331611410  0.020278298
##                         fc       four_g   int_memory         m_dep    mobile_wt
## battery_power  0.024767494  0.019938710 -0.002448800  0.0180279418  0.025958603
## blue           0.023292771  0.007257908  0.053414092  0.0093690006 -0.006485632
## clock_speed    0.002754531 -0.057382670 -0.030032005 -0.0281770229  0.035651441
## dual_sim      -0.032690356 -0.005963034 -0.021147134 -0.0315536434 -0.022803886
## fc             1.000000000 -0.002570972  0.002310680  0.0031868746  0.005784563
## four_g        -0.002570972  1.000000000  0.013032115  0.0072036550 -0.016554275
## int_memory     0.002310680  0.013032115  1.000000000  0.0178134630 -0.043980038
## m_dep          0.003186875  0.007203655  0.017813463  1.0000000000  0.046793257
## mobile_wt      0.005784563 -0.016554275 -0.043980038  0.0467932568  1.000000000
## n_cores       -0.019637727 -0.037348259 -0.025041963  0.0009156771  0.009914050
## pc             0.652122031  0.016968308 -0.021273639  0.0299655187  0.024291907
## px_height     -0.006590821 -0.025824771  0.015431265  0.0062239689 -0.003082136
## px_width       0.005290189 -0.015008533  0.004010831  0.0172273172  0.017923230
## ram            0.009237142  0.011502956  0.045490311  0.0002751541 -0.010363590
## sc_h          -0.013013137  0.031762809  0.036865628 -0.0220326109 -0.047147059
## sc_w           0.007312654  0.047803722  0.004508431  0.0014318417 -0.018342096
## talk_time     -0.008961408 -0.034967236 -0.026386540 -0.0281592184  0.021844427
## three_g        0.004681036  0.585028436 -0.012051909 -0.0011657674  0.003655296
## touch_screen   0.004824658  0.018052764 -0.020036869 -0.0093778828 -0.003117977
## wifi           0.011815305 -0.005257392  0.031382958 -0.0161489591  0.005373538
## price_range    0.019337935  0.020282411  0.053645630  0.0057837761 -0.034660253
##                     n_cores           pc    px_height      px_width
## battery_power -0.0177411620  0.031993469  0.017402719 -0.0004907734
## blue           0.0527160495 -0.010296083  0.007882192 -0.0316993038
## clock_speed   -0.0063607513 -0.016285884 -0.009809379  0.0007595226
## dual_sim      -0.0319482980 -0.023118330 -0.019620695  0.0125723368
## fc            -0.0196377267  0.652122031 -0.006590821  0.0052901886
## four_g        -0.0373482595  0.016968308 -0.025824771 -0.0150085328
## int_memory    -0.0250419635 -0.021273639  0.015431265  0.0040108313
## m_dep          0.0009156771  0.029965519  0.006223969  0.0172273172
## mobile_wt      0.0099140505  0.024291907 -0.003082136  0.0179232301
## n_cores        1.0000000000 -0.005766890  0.006023692  0.0165248231
## pc            -0.0057668904  1.000000000 -0.022458063  0.0114332923
## px_height      0.0060236920 -0.022458063  1.000000000  0.5198784173
## px_width       0.0165248231  0.011433292  0.519878417  1.0000000000
## ram            0.0050092223  0.036211511 -0.006425915  0.0114017455
## sc_h          -0.0056175585 -0.002570762  0.051109349  0.0190378969
## sc_w           0.0250933247 -0.010772943  0.028999309  0.0360486643
## talk_time     -0.0011794900  0.003152582 -0.011101879  0.0095917054
## three_g       -0.0302031693  0.010546271 -0.043552638 -0.0189697158
## touch_screen   0.0043601353 -0.004849872  0.023410738 -0.0136633262
## wifi          -0.0104982027 -0.010424038  0.048430336  0.0313367017
## price_range    0.0018328630  0.044875034  0.156685148  0.1687170695
##                         ram         sc_h          sc_w    talk_time
## battery_power  0.0153362192 -0.022718991 -0.0008134113  0.014458731
## blue           0.0366201558 -0.005738414  0.0214954626  0.002430888
## clock_speed   -0.0199962418 -0.001224846  0.0031684454  0.005582302
## dual_sim       0.0404085086 -0.007560082 -0.0186770241 -0.052555861
## fc             0.0092371421 -0.013013137  0.0073126537 -0.008961408
## four_g         0.0115029565  0.031762809  0.0478037216 -0.034967236
## int_memory     0.0454903112  0.036865628  0.0045084313 -0.026386540
## m_dep          0.0002751541 -0.022032611  0.0014318417 -0.028159218
## mobile_wt     -0.0103635898 -0.047147059 -0.0183420957  0.021844427
## n_cores        0.0050092223 -0.005617558  0.0250933247 -0.001179490
## pc             0.0362115113 -0.002570762 -0.0107729428  0.003152582
## px_height     -0.0064259151  0.051109349  0.0289993085 -0.011101879
## px_width       0.0114017455  0.019037897  0.0360486643  0.009591705
## ram            1.0000000000  0.032142927  0.0670100735  0.002731282
## sc_h           0.0321429273  1.000000000  0.5115564500 -0.020388314
## sc_w           0.0670100735  0.511556450  1.0000000000 -0.018580145
## talk_time      0.0027312816 -0.020388314 -0.0185801452  1.000000000
## three_g        0.0188379804  0.024381347  0.0442164420 -0.045275868
## touch_screen  -0.0379200991 -0.017302456  0.0131372600  0.025869921
## wifi           0.0072210125  0.043243937  0.0391684747 -0.019094802
## price_range    0.9183849779  0.033863847  0.0625743091  0.005844182
##                    three_g  touch_screen         wifi  price_range
## battery_power  0.011550248 -0.0048061387 -0.010870001  0.213246240
## blue          -0.039310042 -0.0009070545 -0.022724626  0.041151882
## clock_speed   -0.046692569  0.0240149372 -0.038333573 -0.033161141
## dual_sim      -0.012718671 -0.0137947226  0.010726035  0.020278298
## fc             0.004681036  0.0048246581  0.011815305  0.019337935
## four_g         0.585028436  0.0180527640 -0.005257392  0.020282411
## int_memory    -0.012051909 -0.0200368692  0.031382958  0.053645630
## m_dep         -0.001165767 -0.0093778828 -0.016148959  0.005783776
## mobile_wt      0.003655296 -0.0031179770  0.005373538 -0.034660253
## n_cores       -0.030203169  0.0043601353 -0.010498203  0.001832863
## pc             0.010546271 -0.0048498720 -0.010424038  0.044875034
## px_height     -0.043552638  0.0234107379  0.048430336  0.156685148
## px_width      -0.018969716 -0.0136633262  0.031336702  0.168717070
## ram            0.018837980 -0.0379200991  0.007221012  0.918384978
## sc_h           0.024381347 -0.0173024564  0.043243937  0.033863847
## sc_w           0.044216442  0.0131372600  0.039168475  0.062574309
## talk_time     -0.045275868  0.0258699210 -0.019094802  0.005844182
## three_g        1.000000000  0.0276482040  0.014007272  0.026378587
## touch_screen   0.027648204  1.0000000000  0.040066150 -0.031013867
## wifi           0.014007272  0.0400661496  1.000000000  0.001192574
## price_range    0.026378587 -0.0310138675  0.001192574  1.000000000
corrplot(cor(df.train), type='upper', order='hclust', col=brewer.pal(n=8, name="RdYlBu"))

corrplot(cor(df.train), method = "number",
           type = "upper",
           tl.cex = 0.8,
           tl.srt = 40,
           tl.col = "red")

Từ hình dung ma trận tương quan này, thấy rằng 2 đặc điểm có tương quan cao nhất là: “price_range” và “ram”

Liên quan đến price_range (biến dùng dự đoán), ta cũng có thể thấy rằng “pin_power” và “px_height” đều có tương quan nhẹ với “price_range”

ggplot(data = df.train, mapping=aes(x=ram, y=price_range)) +
    geom_smooth(se=FALSE, color='darkgreen', method='gam', formula = y ~ s(x, bs = "cs")) + 
    ggtitle('Ram v. Price Range: +90% correlation') +
    theme(plot.title = element_text(face="bold")) + 
    labs(x = 'Ram', y='Price Range')

ggplot(data = df.train, mapping=aes(x=battery_power, y=price_range)) +
    geom_smooth(se=FALSE, color='darkblue', method='gam', formula = y ~ s(x, bs = "cs")) +
    ggtitle('Battery Power v. Price Range: +20% correlation') +
    theme(plot.title = element_text(face="bold")) +
    labs(x = 'Battery Power', y='Price Range')

ggplot(data = df.train, mapping=aes(x=px_height, y=price_range)) +
    geom_smooth(se=FALSE, color='red', method='gam', formula = y ~ s(x, bs = "cs")) +
    ggtitle('Pixel Height v. Price Range: ~15% correlation') +
    theme(plot.title = element_text(face="bold")) +
    labs(x = 'Pixel Height', y='Price Range')

  1. Machine Learning¶ 2.1. Decision tree:
#Xây dựng mô hình cây quyết định
library(rpart)
library(rpart.plot)
fit <- rpart(price_range~., data = df.train, method = 'class')
fit
## n= 1500 
## 
## node), split, n, loss, yval, (yprob)
##       * denotes terminal node
## 
##  1) root 1500 1125 0 (0.25000000 0.25000000 0.25000000 0.25000000)  
##    2) ram< 2235.5 781  406 0 (0.48015365 0.42253521 0.09731114 0.00000000)  
##      4) ram< 1123.5 340   38 0 (0.88823529 0.11176471 0.00000000 0.00000000) *
##      5) ram>=1123.5 441  149 1 (0.16553288 0.66213152 0.17233560 0.00000000)  
##       10) battery_power< 1008 152   65 1 (0.38815789 0.57236842 0.03947368 0.00000000)  
##         20) ram< 1541 58   10 0 (0.82758621 0.17241379 0.00000000 0.00000000) *
##         21) ram>=1541 94   17 1 (0.11702128 0.81914894 0.06382979 0.00000000) *
##       11) battery_power>=1008 289   84 1 (0.04844291 0.70934256 0.24221453 0.00000000)  
##         22) ram< 1951.5 228   46 1 (0.06140351 0.79824561 0.14035088 0.00000000) *
##         23) ram>=1951.5 61   23 2 (0.00000000 0.37704918 0.62295082 0.00000000)  
##           46) battery_power< 1467 30    9 1 (0.00000000 0.70000000 0.30000000 0.00000000) *
##           47) battery_power>=1467 31    2 2 (0.00000000 0.06451613 0.93548387 0.00000000) *
##    3) ram>=2235.5 719  344 3 (0.00000000 0.06258693 0.41585535 0.52155772)  
##      6) ram< 3013.5 327   94 2 (0.00000000 0.13761468 0.71253823 0.14984709) *
##      7) ram>=3013.5 392   66 3 (0.00000000 0.00000000 0.16836735 0.83163265) *
rpart.plot(fit, extra = 106)
## Warning: extra=106 but the response has 4 levels (only the 2nd level is
## displayed)

#Dự đoán dựa trên tập test
predict_unseen <-predict(fit, df.test, type = 'class')
table_mat <- table(df.test$price_range, predict_unseen)
table_mat
##    predict_unseen
##       0   1   2   3
##   0 120   5   0   0
##   1  19  87  19   0
##   2   0  22  81  22
##   3   0   0  19 106
#Tính độ chính xác của mô hình bằng confusion matrix:
accuracy_Test <- sum(diag(table_mat)) / sum(table_mat)
print(paste('Accuracy for test', accuracy_Test))
## [1] "Accuracy for test 0.788"

2.2. KNN: K-Nearest Neighbors

library(tidyverse) 
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.1.3
## 
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
## 
##     combine
library(caret)
## Warning: package 'caret' was built under R version 4.1.3
## Loading required package: lattice
## 
## Attaching package: 'caret'
## The following object is masked from 'package:purrr':
## 
##     lift
# hyperparameter and model adjustment by Cross Validation method
ctrl <- trainControl(method = "cv", number = 10)

set.seed(1)
knn <- train(
  price_range ~ ram + battery_power + px_height,
  data = df.train,
  method = 'knn',
  trControl = ctrl,
  tuneGrid = expand.grid(k = seq(1, 15, by = 1))
)
knn
## k-Nearest Neighbors 
## 
## 1500 samples
##    3 predictor
## 
## No pre-processing
## Resampling: Cross-Validated (10 fold) 
## Summary of sample sizes: 1351, 1349, 1351, 1350, 1348, 1350, ... 
## Resampling results across tuning parameters:
## 
##   k   RMSE       Rsquared   MAE      
##    1  0.3575093  0.9001711  0.1287431
##    2  0.3111152  0.9230505  0.1367413
##    3  0.2952547  0.9304275  0.1389629
##    4  0.2860624  0.9345924  0.1444746
##    5  0.2846254  0.9353289  0.1499345
##    6  0.2829840  0.9360956  0.1538303
##    7  0.2779913  0.9382954  0.1542945
##    8  0.2793736  0.9376517  0.1592885
##    9  0.2794585  0.9376335  0.1615395
##   10  0.2809038  0.9370557  0.1646211
##   11  0.2808334  0.9371045  0.1671889
##   12  0.2827885  0.9362779  0.1701199
##   13  0.2827774  0.9362637  0.1728964
##   14  0.2835032  0.9359338  0.1749558
##   15  0.2834295  0.9359813  0.1757614
## 
## RMSE was used to select the optimal model using the smallest value.
## The final value used for the model was k = 7.
df.test$predictions <-  predict(knn, df.test)
data.frame(
  RMSE = RMSE(df.test$predictions, df.test$price_range),
  MSE = RMSE(df.test$predictions, df.test$price_range)**2,
  Rsquare = R2(df.test$predictions, df.test$price_range)
)
##        RMSE        MSE   Rsquare
## 1 0.2811703 0.07905676 0.9368128
df.train$predictions <-  predict(knn, df.train)
data.frame(
  RMSE = RMSE(df.train$predictions, df.train$price_range),
  MSE = RMSE(df.train$predictions, df.train$price_range)**2,
  Rsquare = R2(df.train$predictions, df.train$price_range)
)
##        RMSE        MSE   Rsquare
## 1 0.2430252 0.05906122 0.9527674

2.3. SVM: Support Vector Machine Tiếp theo, sử dụng Support Vector Machine. Đối với các biến x ,sẽ sử dụng 3 giá trị có tương quan cao nhất với phạm vi giá đó là: ram, năng lượng pin và chiều cao px.

set.seed(1)

svm <- svm(price_range~ram+battery_power+px_height, data=df.train, cost=10)

# Root Mean Squared Error (SVM)
predict_svm_train <- predict(svm, df.train)
sqrt(mean(df.train$price_range - predict_svm_train)^2)
## [1] 0.007077715
predict_svm_test <- predict(svm, df.test)  
sqrt(mean(df.test$price_range - predict_svm_test)^2)
## [1] 0.00081374
# Mean Squared Error (SVM)
predict_svm_train_2 <- predict(svm, df.train)
mean(df.train$price_range - predict_svm_train_2)^2
## [1] 5.009405e-05
predict_svm_test_2 <- predict(svm, df.test)  
mean(df.test$price_range - predict_svm_test_2)^2
## [1] 6.621728e-07

Đầu tiên, thấy rằng sai số của Nhóm là trong phạm vi phần nghìn (cực kỳ nhỏ).Nhóm đang phân loại điện thoại di động thành các khoảng giá sau: 0, 1, 2 và 3. Do đó,Nhóm có thể kết luận rằng lỗi của mô hình là cực kỳ nhỏ và mô hình hoạt động rất tốt.

2.4. Linear Regression Bây giờ,Nhóm sẽ thử tiếp với Linear Regression để thử và dự đoán phạm vi giá. Đầu tiên, nhóm sẽ chỉ sử dụng biến tương quan nhất với phạm vi giá là ram

set.seed(1)
lr.fit = lm(price_range~ram, data=df.train)
summary(lr.fit)
## 
## Call:
## lm(formula = price_range ~ ram, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.35662 -0.26222 -0.00246  0.26447  1.39274 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -5.182e-01  2.521e-02  -20.56   <2e-16 ***
## ram          9.498e-04  1.057e-05   89.83   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4427 on 1498 degrees of freedom
## Multiple R-squared:  0.8434, Adjusted R-squared:  0.8433 
## F-statistic:  8070 on 1 and 1498 DF,  p-value: < 2.2e-16

Kết quả của Nhóm từ mô hình Linear Regression là khá tốt - biến có ý nghĩa thống kê (như mong đợi), ngoài ra, giá trị R-squared là 0,84 (84%)

Việc thêm pin_power (biến tương quan thứ hai với phạm vi giá) vào có cải thiện mô hình của không?

set.seed(1)

lr.fit2 = lm(price_range~ram+battery_power, data=df.train)
summary(lr.fit2)
## 
## Call:
## lm(formula = price_range ~ ram + battery_power, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.05656 -0.27630  0.00309  0.24031  1.24513 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.145e+00  3.531e-02  -32.41   <2e-16 ***
## ram            9.466e-04  9.140e-06  103.57   <2e-16 ***
## battery_power  5.101e-04  2.263e-05   22.54   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3826 on 1497 degrees of freedom
## Multiple R-squared:  0.8831, Adjusted R-squared:  0.8829 
## F-statistic:  5655 on 2 and 1497 DF,  p-value: < 2.2e-16

nó cải thiện mô hình của nhóm! nhóm có thể cải thiện mô hình của mình hơn nữa bằng cách thêm biến tương quan thứ ba vào phạm vi giá (px_height) không?

set.seed(1)
lr.fit3 = lm(price_range~ram+battery_power+px_height, data=df.train)
summary(lr.fit3)
## 
## Call:
## lm(formula = price_range ~ ram + battery_power + px_height, data = df.train)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.95723 -0.25966 -0.00216  0.24152  0.83879 
## 
## Coefficients:
##                 Estimate Std. Error t value Pr(>|t|)    
## (Intercept)   -1.395e+00  3.360e-02  -41.52   <2e-16 ***
## ram            9.477e-04  8.092e-06  117.11   <2e-16 ***
## battery_power  5.030e-04  2.004e-05   25.10   <2e-16 ***
## px_height      4.019e-04  1.976e-05   20.34   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.3388 on 1496 degrees of freedom
## Multiple R-squared:  0.9084, Adjusted R-squared:  0.9082 
## F-statistic:  4947 on 3 and 1496 DF,  p-value: < 2.2e-16

Nhóm nhận được giá trị R-squared là 0,91, tỷ lệ này là 91% (trên 100). Kết quả này rất tốt và nó có nghĩa là Mô hình Linear Regression của nhóm đã hoạt động rất tốt.

Bây giờ, nhóm sẽ tính toán RMSE và MSE cho Mô hình Linear Regression.

# Root Mean Squared Error (LR)
predict_lr.fit3_train <- predict(lr.fit3, df.train)
sqrt(mean(df.train$price_range - predict_lr.fit3_train)^2)
## [1] 6.603066e-15
predict_lr.fit3_test <- predict(lr.fit3, df.test)  
sqrt(mean(df.test$price_range - predict_lr.fit3_test)^2)
## [1] 0.001762545
# Mean Squared Error (LR)
predict_lr.fit3_train_2 <- predict(lr.fit3, df.train)
mean(df.train$price_range - predict_lr.fit3_train_2)^2
## [1] 4.360048e-29
predict_lr.fit3_test_2 <- predict(lr.fit3, df.test)  
mean(df.test$price_range - predict_lr.fit3_test_2)^2
## [1] 3.106564e-06

Từ kết quả RMSE và MSE của Nhóm, thấy rằng Mô hình Linear Regression của Nhóm hoạt động rất tốt, tương tự như Mô hình SVM của Nhóm.

nhóm đang sử dụng mô hình hồi quy cho một bài toán phân loại. Tại sao điều này hoạt động? Vì biến y của chúng ta sẽ là 0, 1, 2 hoặc 3 nên mô hình của nhóm coi nó như thể nó là hồi quy và chạy. Hơn nữa, nó hoạt động tốt vì nó đánh giá 4 danh mục nhóm (ở trên) dưới dạng các biến định lượng (không phải định tính) và sử dụng Linear Regression để tìm khoảng giá tối ưu cho mỗi quan sát, sau đó được phân loại thành 0, 1, 2 hoặc 3.

hình ảnh 3D bao gồm ram, battery power, pixel height, được tô màu theo dự đoán của Linear Regression về giá là 0, 1, 2 hoặc 3.

fig <- plot_ly(
    df.train,
    x=~df.train$ram,
    y=~df.train$battery_power,
    z=~df.train$px_height,
    color=predict_lr.fit3_train,
    type='scatter3d',
    mode='markers')

fig <- fig %>% layout(
title='Ram x Battery Power x Pixel Height',
    scene=list(
    xaxis=list(title='Ram'),
    yaxis=list(title='Battery Power'),
    zaxis=list(title='Pixel Height')
    ))
fig

Từ mô hình 3D, Nhóm có thể thấy một cách trực quan từng biến số đóng góp vào giá của một chiếc Điện thoại di động như thế nào.

*Tổng Kết: Mô hình nào tốt hơn: Decision tree, SVM , Linear Regression, KNN? Từ kết quả, Nhóm thấy rằng các giá trị của Mô hình Linear Regression cho RMSE và MSE tương ứng nhỏ hơn các giá trị RMSE và MSE cho Mô hình SVM và KNN, Decision tree

Vì vậy, Mô hình Linear Regression hoạt động tốt hơn mô hình SVM ,KNN

Giải quyết câu hỏi trọng tâm của Nhóm: Tính năng nào quan trọng nhất trong việc dự đoán Giá điện thoại di động? Đầu tiên, nhìn vào ma trận tương quan, Nhóm thấy rằng ram là biến có tương quan nhất với phạm vi giá, năng lượng pin là biến có tương quan nhiều thứ hai với phạm vi giá và chiều cao px là biến tương quan thứ ba với phạm vi giá.

Bây giờ, nhìn vào phần tóm tắt của Mô hình Linear Regression, thấy rằng cả 3 biến (ram, battery power, pixel height) đều có t-values rất cao, nghĩa là chúng đều rất quan trọng trong việc dự đoán biến y của nhóm. Cụ thể, ram có t-values cao nhất, battery power có t-values cao thứ hai và pixel height có t-values cao thứ ba. “Thứ tự của tầm quan trọng thay đổi” này trực tiếp tương ứng với những phát hiện của nhóm từ ma trận tương quan của chúng tôi ở trên!

Tóm lại, các tính năng quan trọng nhất trong việc dự đoán giá của một chiếc Điện thoại di động là ram, battery power, pixel height.